package com.example.txl.dao;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.example.txl.bean.PeoBean;
import com.example.txl.until.DBUntil;
import com.hankcs.hanlp.HanLP;
//数据访问对象（DAO）层
public class PeoDao {

    public static SQLiteDatabase db = DBUntil.db;// 用它来操作数据库

    // 获取所有联系人信息的方法
    public static List<PeoBean> getAllPeo() {
        List<PeoBean> list = new ArrayList<>();
        Cursor res = db.rawQuery("select * from d_peo", null);
        while (res.moveToNext()) {
            // 从查询结果中创建一个PeoBean对象，这里只传入了部分参数（最后一个备注参数为空字符串）
            PeoBean peoBean = new PeoBean(res.getString(0), res.getString(1), res.getString(2), res.getString(3), "");

            String name = res.getString(1);
            // 获取联系人姓名的第一个字符，用于确定首字母
            String first = name.substring(0, 1);// 得到第一个字符
            if (first.matches("^[a-zA-z]*")) {
                // 如果第一个字符是英文字母，将其转换为大写并设置为首字母
                peoBean.setBeginZ(first.toUpperCase());// 是字母转为大写存入
            } else {
                String regEx = "[\\u4e00-\\u9fa5]+";
                Pattern p = Pattern.compile(regEx);
                Matcher m = p.matcher(first);
                if (m.find()) {
                    // // 如果第一个字符是中文，使用HanLP将中文转换为拼音
                    String py = HanLP.convertToPinyinString(first, " ", false);// 李 li
                    // 取拼音的第一个字符
                    String xm = py.substring(0, 1);// l
                    // 将拼音的第一个字符转换为大写并设置为首字母
                    peoBean.setBeginZ(xm.toUpperCase());
                } else {
                    // 如果既不是英文字母也不是中文，设置首字母为'#'
                    peoBean.setBeginZ("#");

                }
            }
            list.add(peoBean);
        }
        return list;
    }

    // 删除信息，根据联系人的id删除数据库中的记录
    public static void delPeo(String id) {
        db.execSQL("DELETE FROM d_peo where s_id=?", new String[]{id});
    }
    // 查询个人信息，根据联系人id查询单个联系人信息
    public static PeoBean getOnePeo(String id) {
        Cursor res = db.rawQuery("select * from d_peo where s_id=?", new String[]{id});
        PeoBean peoBean = null;
        while (res.moveToNext()) {
            peoBean = new PeoBean(res.getString(0), res.getString(1), res.getString(2), res.getString(3), res.getString(4));
        }
        return peoBean;
    }
    // 更新，根据联系人的id更新数据库中的记录
    public static void updatePeo(String nameT, String phoneT, String sex, String bzT, String id) {
        db.execSQL("UPDATE d_peo SET s_name=?, s_phone=?, s_sex=?, s_remark=? where s_id=?", new String[]{nameT, phoneT, sex, bzT, id});
    }
    //  向数据库中添加联系人信息的方法
    public static void addPeo(String nameT, String phoneT, String sex, String bzT) {
        db.execSQL("INSERT INTO d_peo (s_name, s_phone, s_sex, s_remark) VALUES(?, ?, ?, ?)", new String[]{nameT, phoneT, sex, bzT});
    }
    // 搜索
    public static List<PeoBean> getAllPeo(String id) {
        List<PeoBean> list = new ArrayList<>();
        // 构建SQL查询语句，查询姓名或电话包含关键词的联系人记录
        String query = "SELECT * FROM d_peo WHERE s_phone LIKE '%"+id+"%' OR s_name like '%"+id+"%'";
        Cursor res = db.rawQuery(query, null);
        while (res.moveToNext()) {
            // 从查询结果中创建一个PeoBean对象，这里只传入了部分参数（最后一个备注参数为空字符串）
            PeoBean peoBean = new PeoBean(res.getString(0), res.getString(1), res.getString(2), res.getString(3), "");

            String name = res.getString(1);
            // 获取首字母
            String first = name.substring(0, 1);// 得到第一个字符
            if (first.matches("^[a-zA-z]*")) {
                peoBean.setBeginZ(first.toUpperCase());// 是字母转为大写存入
            } else {
                String regEx = "[\\u4e00-\\u9fa5]+";
                Pattern p = Pattern.compile(regEx);
                Matcher m = p.matcher(first);
                if (m.find()) {
                    // 将中文转换为拼音
                    String py = HanLP.convertToPinyinString(first, " ", false);
                    // 取拼音的第一个字符
                    String xm = py.substring(0, 1);// l
                    peoBean.setBeginZ(xm.toUpperCase());// 转为大写存入
                } else {
                    peoBean.setBeginZ("#");// 其他字符为#

                }
            }
            list.add(peoBean);
        }
        return list;
    }
}
